package com.niit.qcx.commAgePrice;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**Reducer阶段：
 对相同小区的房龄(今年-建造年份)和价格数据进行汇总再计算平均房龄和平均价格。
 输出小区名称和平均房龄与平均价格，如<香水鸿门,[11年，83万元]>
 */
public class commAPReducer extends Reducer<Text, commAPBean, Text, commAPBean> {
    private commAPBean outv = new commAPBean();
    @Override
    protected void reduce(Text key, Iterable<commAPBean> values, Context context) throws IOException, InterruptedException {
        List<Integer> years = new ArrayList<>();//用来装的列表
        float sum = 0;
        int count = 0;

        for (commAPBean value : values) {
            years.add(value.getYear());//循环累加同小区的房龄
            sum += value.getTotalPrice();
            count++;//计数用于平均
        }

        float avePrice = sum / count;
        int aveAge = calcuAveAge(years);

        outv.set(aveAge,avePrice);
        context.write(key,outv);
    }

    private int calcuAveAge(List<Integer> years) {
                                                            //算出到今年的房龄         求和再平均
        int aveage = years.stream().mapToInt(Integer::intValue).map(y -> 2024 - y).sum() / years.size();
        return aveage;
    }
}

